/**
 * 
 */
package ec.edu.uce.erp.web.common.controladores;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Transformer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ec.edu.uce.erp.common.util.SeguridadesException;
import ec.edu.uce.erp.ejb.persistence.entities.CompaniaDTO;
import ec.edu.uce.erp.ejb.persistence.entities.PerfilDTO;
import ec.edu.uce.erp.ejb.servicio.ServicioAdministracion;

/**
 * @author 
 *
 */
@SessionScoped
@ManagedBean (name = "selectItemsController")
public class SelectItemsController extends BaseController {
	
	private static final long serialVersionUID = 1L;
	
	private static final Logger slf4jLogger = LoggerFactory.getLogger(SelectItemsController.class);
	
	@EJB
	private ServicioAdministracion servicioAdministracion;
	
	private List<SelectItem> catalogoListaCompania;
	private List<SelectItem> catalogoListaPerfiles;
	
	public SelectItemsController () {}
	
	@PostConstruct
	public void inicializarObjetos () {
		this.catalogoListaCompania = new ArrayList<SelectItem>();
		this.catalogoListaPerfiles = new ArrayList<SelectItem>();
	}
	
	/**
	 * @return the catalogoListaCompania
	 */
	public List<SelectItem> getCatalogoListaCompania() {
		
		slf4jLogger.info("cargar catalogo compania");
		if (CollectionUtils.isEmpty(catalogoListaCompania)) {
			CompaniaDTO dto = new CompaniaDTO();
			dto.setEstado(getEstadoActivo());
			try {
				List<CompaniaDTO> companiaCol = servicioAdministracion.buscarCompania(dto);
				CollectionUtils.collect(companiaCol, new Transformer() {
					@Override
					public Object transform(final Object arg0) {
						final CompaniaDTO companiaDTO = (CompaniaDTO)arg0;
						return new SelectItem(companiaDTO.getIdCompania(), companiaDTO.getNombreCompania());
					}
				}, catalogoListaCompania);
			} catch (SeguridadesException e) {
				slf4jLogger.info("error al cargar catalogo compania {}", e.getMessage());
				MensajesWebController.aniadirMensajeError("Error al cargar catalogo compania");
			}
		}
		
		return catalogoListaCompania;
	}

	/**
	 * @return the catalogoListaPerfiles
	 */
	public List<SelectItem> getCatalogoListaPerfiles() {
		
		slf4jLogger.info("cargar catalogo perfiles");
		
		if (CollectionUtils.isEmpty(this.catalogoListaPerfiles)) {
			try {
				PerfilDTO dto = new PerfilDTO();
				dto.setEstado(getEstadoActivo());
				List<PerfilDTO> perfilesCol = servicioAdministracion.buscarPerfiles(dto);
				CollectionUtils.collect(perfilesCol, new Transformer() {
					@Override
					public Object transform(final Object arg0) {
						final PerfilDTO perfilDTO = (PerfilDTO)arg0;
						return new SelectItem(perfilDTO.getIdPerfil(), perfilDTO.getNombrePerfil());
					}
				}, catalogoListaPerfiles);
			} catch (SeguridadesException e) {
				slf4jLogger.info("error al cargar catalogo perfiles {}", e.getMessage());
				MensajesWebController.aniadirMensajeError("Error al cargar catalogo perfiles");
			}
		}
		
		return catalogoListaPerfiles;
	}
	
}
